package gmseal

// GB/T38540-2020
import (
	"encoding/asn1"
	"time"
)

// SESeal 电子印章数据
type SESeal struct {
	ESealInfo   SES_SealInfo          // 印章信息
	Cert        []byte                // 制章者证书
	SignAlgID   asn1.ObjectIdentifier // 签名算法标识
	SignedValue asn1.BitString        // 签名值
}

// SES_Header 印章头
type SES_Header struct {
	ID      string `asn1:"ia5"` // 头标识，固定值 ES
	Version int    // 印章版本号，固定值4，代表当前版本为v4
	Vid     string `asn1:"ia5"` // 厂商标识
}

// SES_ESPropertyInfo 印章属性
type SES_ESPropertyInfo struct {
	Type         int           // 印章类型
	Name         string        `asn1:"utf8"` // 印章名称
	CertListType int           // 签章者证书信息类型
	CertList     asn1.RawValue // TODO 签章者证书信息列表
	CreateDate   time.Time     `asn1:"generalized"` // 印章制作时间
	ValidStart   time.Time     `asn1:"generalized"` // 印章有效期起始时间
	ValidEnd     time.Time     `asn1:"generalized"` // 印章有效期终止时间
}

// SES_SealInfo 印章信息
type SES_SealInfo struct {
	Header   SES_Header         // 印章头
	EsID     string             `asn1:"ia5"` // 印章标识
	Property SES_ESPropertyInfo // 印章属性
	Picture  asn1.RawValue      // TODO 印章图像数据
	ExtDatas asn1.RawValue      `asn1:"optional"` // TODO 自定义数据
}
